import java.util.Scanner;

/**
 * <p>
 * 插入排序
 * </p>
 * <p>
 * 我们应该每个人都从小就会插入排序了（应该不会有人没打过扑克牌吧）
 * </p>
 * <p>时间复杂度：最坏情况下为O(N*N)，此时待排序列为逆序，或者说接近逆序</p>
 * <p>最好情况下为O(N)，此时待排序列为升序，或者说接近升序</p>
 * <p>空间复杂度：O(1)</p>
 * @author 没天赋
 * @since 2025-2-28
 */
public class insertSort {
    // 限定大小
    public static final int N = (int) (1e5 + 5);
    // 记录数组大小
    public static int n;
    public static int[] arr = new int[N];
    public static Scanner sc = new Scanner(System.in);

    public static void main(String[] args) {
        n = sc.nextInt();
        for (int i = 1; i <= n; i++) {
            arr[i] = sc.nextInt();
        }
        // 插入排序
        insertSort();
        // 输出
        for (int i = 1; i <= n; i++) {
            System.out.print(arr[i] + " ");
        }
    }

    /**
     * 插入排序算法，读者可以联想自己平时打牌洗牌的方式进行理解
     */
    public static void insertSort() {
        for (int i = 1; i < n; i++) {
            // 从下一个元素的位置开始插入
            int end = i;
            int temp = arr[end + 1];
            // 从后往前找
            while (end >= 1) {
                // 如果当前元素大于等于前一个元素，则跳出循环
                if (arr[end] <= temp) {
                    break;
                }
                // 将当前元素继续向前插入,即比它大的数往后移
                arr[end + 1] = arr[end];
                end--;
            }
            // temp放到比插入的数小的数的后面
            arr[end + 1] = temp;
            //代码执行到此位置有两种情况:
            //1.待插入元素找到应插入位置（break跳出循环到此）
            //2.待插入元素比当前有序序列中的所有元素都小（while循环结束后到此）
        }
    }
}

// 本算法的功能比较简单，这里就不提供测试数据，读者可自行创造数据进行测试
